summaryrefslogtreecommitdiff
path: root/src/routes/posts/[slug]
diff options
context:
space:
mode:
authorBerke Güzel <wenekar1@gmail.com>2026-01-29 23:56:21 +0300
committerBerke Güzel <wenekar1@gmail.com>2026-01-29 23:56:21 +0300
commit35556dca71eafdac4eb5d2fe781ba39687d0b058 (patch)
treed85489336dce549b08d385c45cec6ae0678b211b /src/routes/posts/[slug]
parent292d9dd4241ace94bfaf50827dcedfbd40de8032 (diff)
initial commit
Diffstat (limited to 'src/routes/posts/[slug]')
-rw-r--r--src/routes/posts/[slug]/+page.svelte36
-rw-r--r--src/routes/posts/[slug]/+page.ts26
2 files changed, 62 insertions, 0 deletions
diff --git a/src/routes/posts/[slug]/+page.svelte b/src/routes/posts/[slug]/+page.svelte
new file mode 100644
index 0000000..2a57168
--- /dev/null
+++ b/src/routes/posts/[slug]/+page.svelte
@@ -0,0 +1,36 @@
+<script lang="ts">
+ import type { PageData } from "./$types";
+ import Giscus from "$lib/components/Giscus.svelte";
+
+ let { data }: { data: PageData } = $props();
+
+ function formatDate(dateStr: string): string {
+ return new Date(dateStr).toLocaleDateString("en-US", {
+ year: "numeric",
+ month: "long",
+ day: "numeric",
+ });
+ }
+</script>
+
+<svelte:head>
+ <title>{data.metadata.title} | My Blog</title>
+ <meta name="description" content={data.metadata.description} />
+</svelte:head>
+
+<article>
+ <header>
+ <h1>{data.metadata.title}</h1>
+ <p>
+ <time datetime={data.metadata.date}
+ >{formatDate(data.metadata.date)}</time
+ >
+ </p>
+ </header>
+
+ <data.content />
+</article>
+
+<Giscus />
+
+<a href="/">← Back to all posts</a>
diff --git a/src/routes/posts/[slug]/+page.ts b/src/routes/posts/[slug]/+page.ts
new file mode 100644
index 0000000..d0776db
--- /dev/null
+++ b/src/routes/posts/[slug]/+page.ts
@@ -0,0 +1,26 @@
+import { getPost, getPosts } from '$lib/utils/posts';
+import { error } from '@sveltejs/kit';
+import type { PageLoad } from './$types';
+
+export const prerender = true;
+
+// Generate all post routes at build time
+export function entries() {
+ const posts = getPosts();
+ return posts.map((post) => ({ slug: post.slug }));
+}
+
+export const load: PageLoad = async ({ params }) => {
+ const slug = params.slug;
+ const post = getPost(slug);
+
+ if (!post) {
+ error(404, `Post not found: ${slug}`);
+ }
+
+ return {
+ content: post.default,
+ metadata: post.metadata,
+ slug
+ };
+};